import random
import math

def estimate_pi(precision=1e-6):
    inside_circle = 0
    total_points = 0
    point_count = 1  # 初始点数，用于调整精度

    while True:
        x, y = random.random(), random.random()  # 生成[0,1)区间内的随机数
        distance = math.sqrt(x**2 + y**2)  # 计算点到原点的距离

        # 如果点在单位圆内，增加计数
        if distance <= 1:
            inside_circle += 1

        total_points += 1

        # 计算当前估计值
        current_pi_estimate = 4 * inside_circle / total_points

        # 检查当前估计值是否满足精度要求
        if abs(current_pi_estimate - math.pi) < precision:
            break

        # 根据当前误差调整点数，以加快收敛速度
        if total_points % 10000 == 0:  # 每10000点调整一次
            point_count *= 2

    return current_pi_estimate

# 调用函数
pi_estimate = estimate_pi()
print(f"Estimated value of PI: {pi_estimate:.6f}")